package com.ruoyi.combat.util;

import cn.hutool.core.io.FileUtil;
import com.ruoyi.common.utils.StringUtils;

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CityUtil {

    private static Map<String, String> map = new HashMap<>();

    static {
        map.put("河北", "石家庄");
        map.put("山西", "太原");
        map.put("辽宁", "沈阳");
        map.put("吉林", "长春");
        map.put("黑龙江", "哈尔滨");
        map.put("江苏", "南京");
        map.put("浙江", "杭州");
        map.put("安徽", "合肥");
        map.put("福建", "福州");
        map.put("江西", "南昌");
        map.put("山东", "济南");
        map.put("河南", "郑州");
        map.put("湖北", "武汉");
        map.put("湖南", "长沙");
        map.put("广东", "广州");
        map.put("海南", "海口");
        map.put("四川", "成都");
        map.put("贵州", "贵阳");
        map.put("云南", "昆明");
        map.put("陕西", "西安");
        map.put("甘肃", "兰州");
        map.put("青海", "西宁");
        map.put("台湾", "台北");
        map.put("内蒙古", "呼和浩特");
        map.put("广西", "南宁");
        map.put("西藏", "拉萨");
        map.put("宁夏", "银川");
        map.put("新疆", "乌鲁木齐");
    }

    public static void main(String[] args) {
        String url = "http://127.0.0.1:9000/combat/20220608 _4778026329440826.mp4";
        byte[] bytes = downloadPicture(url);
        if (bytes != null) {
            FileUtil.writeBytes(bytes, "C:\\Users\\HYZ\\Desktop\\1.mp4");
        }
        System.out.println();

    }

    public static byte[] downloadVideo(String videoUrl) {
        byte[] byteArray = null;
        try {
            URL url = new URL(videoUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000);

            InputStream in = connection.getInputStream();
            ByteArrayOutputStream out = new ByteArrayOutputStream();

            byte[] buffer = new byte[4096];
            int bytesRead;

            while ((bytesRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytesRead);
            }
            byteArray = out.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return byteArray;
    }

    public static byte[] downloadPicture(String urlList) {
        URL url = null;
        try {
            url = new URL(urlList);
            DataInputStream dataInputStream = new DataInputStream(url.openStream());

            ByteArrayOutputStream output = new ByteArrayOutputStream();

            byte[] buffer = new byte[1024];
            int length;

            while ((length = dataInputStream.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }
            byte[] byteArray = output.toByteArray();
            dataInputStream.close();
            return byteArray;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }


    public static String getCity(String text) {
        if (StringUtils.isEmpty(text)) {
            return "";
        }
        String city1 = getCity1(text);
        if (StringUtils.isEmpty(city1)) {
            Set<String> strings = map.keySet();
            String[] array = {};
            array = strings.toArray(array);
            String value = getValue(text, array);
            if (StringUtils.isNotEmpty(value)) {
                return map.get(value);
            }
        }
        return city1;
    }


    public static String getCity1(String text) {

        if (StringUtils.isEmpty(text)) {
            return "";
        }
        // 城市名称列表（可以根据需要扩展）
        String[] cities = {"石家庄", "唐山", "秦皇岛", "邯郸", "邢台", "保定", "张家口", "承德", "沧州", "廊坊", "衡水", "太原", "大同", "阳泉", "长治", "晋城", "朔州", "晋中", "运城", "忻州", "临汾", "吕梁", "呼和浩特", "包头", "乌海", "赤峰", "通辽", "鄂尔多斯", "呼伦贝尔", "巴彦淖尔", "乌兰察布", "沈阳", "大连", "鞍山", "抚顺", "本溪", "丹东", "锦州", "营口", "阜新", "辽阳", "盘锦", "铁岭", "朝阳", "葫芦岛", "长春", "吉林", "四平", "辽源", "通化", "白山", "松原", "白城", "哈尔滨", "齐齐哈尔", "鸡西", "鹤岗", "双鸭山", "大庆", "伊春", "佳木斯", "七台河", "牡丹江", "黑河", "绥化", "南京", "无锡", "徐州", "常州", "苏州", "南通", "连云港", "淮安", "盐城", "扬州", "镇江", "泰州", "宿迁", "杭州", "宁波", "温州", "嘉兴", "湖州", "绍兴", "金华", "衢州", "舟山", "台州", "丽水", "合肥", "芜湖", "蚌埠", "淮南", "马鞍山", "淮北", "铜陵", "安庆", "黄山", "滁州", "阜阳", "宿州", "六安", "亳州", "池州", "宣城", "福州", "厦门", "莆田", "三明", "泉州", "漳州", "南平", "龙岩", "宁德", "南昌", "景德镇", "萍乡", "九江", "新余", "鹰潭", "赣州", "吉安", "宜春", "抚州", "上饶", "济南", "青岛", "淄博", "枣庄", "东营", "烟台", "潍坊", "济宁", "泰安", "威海", "日照", "临沂", "德州", "聊城", "滨州", "菏泽", "郑州", "开封", "洛阳", "平顶山", "安阳", "鹤壁", "新乡", "焦作", "濮阳", "许昌", "漯河", "三门峡", "南阳", "商丘", "信阳", "周口", "驻马店", "武汉", "黄石", "十堰", "宜昌", "襄阳", "鄂州", "荆门", "孝感", "荆州", "黄冈", "咸宁", "随州", "长沙", "株洲", "湘潭", "衡阳", "邵阳", "岳阳", "常德", "张家界", "益阳", "郴州", "永州", "怀化", "娄底", "广州", "韶关", "深圳", "珠海", "汕头", "佛山", "江门", "湛江", "茂名", "肇庆", "惠州", "梅州", "汕尾", "河源", "阳江", "清远", "东莞", "中山", "潮州", "揭阳", "云浮", "南宁", "柳州", "桂林", "梧州", "北海", "防城港", "钦州", "贵港", "玉林", "百色", "贺州", "河池", "来宾", "崇左", "海口", "三亚", "三沙", "儋州", "成都", "自贡", "攀枝花", "泸州", "德阳", "绵阳", "广元", "遂宁", "内江", "乐山", "南充", "眉山", "宜宾", "广安", "达州", "雅安", "巴中", "资阳", "贵阳", "六盘水", "遵义", "安顺", "毕节", "铜仁", "昆明", "曲靖", "玉溪", "保山", "昭通", "丽江", "普洱", "临沧", "拉萨", "日喀则", "昌都", "林芝", "山南", "那曲", "西安", "铜川", "宝鸡", "咸阳", "渭南", "延安", "汉中", "榆林", "安康", "商洛", "兰州", "嘉峪关", "金昌", "白银", "天水", "武威", "张掖", "平凉", "酒泉", "庆阳", "定西", "陇南", "西宁", "海东", "银川", "石嘴山", "吴忠", "固原", "中卫", "乌鲁木齐", "克拉玛依", "吐鲁番", "哈密", "楚雄州", "红河州", "文山州", "西双版纳州", "大理州", "德宏州", "怒江州", "迪庆州", "黔东南州", "黔南州", "黔西南州", "阿坝州", "甘孜", "凉山", "延边", "恩施", "湘西", "锡林郭勒", "阿拉善", "兴安", "香港", "澳门", "北京", "天津", "上海", "重庆"};

        // 构建正则表达式：匹配列表中的任何一个城市
        return getValue(text, cities);
    }


    public static String getValue(String text, String[] cities) {
        StringBuilder regexBuilder = new StringBuilder();
        for (int i = 0; i < cities.length; i++) {
            regexBuilder.append(cities[i]);
            if (i < cities.length - 1) {
                regexBuilder.append("|");
            }
        }
        String regex = "(" + regexBuilder.toString() + ")";

        // 编译正则表达式
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);

        List<String> list = new ArrayList<>();

        // 查找并输出匹配的城市名称
        while (matcher.find()) {
            list.add(matcher.group());
        }
        if (list.size() > 0) {
            return list.get(0);
        }
        return "";
    }


}
